Ext.define('SistIntegral.RRHH.PeriodoLaboral', {
    alias: "ObjetoPeriodoLaboral",
    forward: true,

    Grid: function (btnp) {
        if (!Ext.getCmp('gridPeriodolaboral' + btnp.IdPersonal)) {

            var StorePeriodoLaboral = Ext.create('Ext.data.Store', {
                model: 'PeriodoLaboral',
                pageSize: 25,
                autoLoad: true,
                proxy: {
                    type: 'ajax',
                    url: 'periodolaboral/Index/' + btnp.IdPersonal,
                    reader: {
                        //type: 'json',
                        root: 'grid',
                        totalProperty: 'total'
                    }
                }
            });

            var gridPeriodoLaboral = Ext.create('Ext.grid.Panel', {
                title: 'Listado de Periodos Laborales',
                id: 'gridPeriodolaboral' + btnp.IdPersonal,
                layout: 'fit',
                autoScroll: true,
                store: StorePeriodoLaboral,
                loadMask: true,
                border: false,
                columnLines: true,
                selModel: {
                    pruneRemoved: false
                },
                viewConfig: {
                    trackOver: false
                },
                columns: [{ xtype: 'rownumberer' },
        {
            text: 'Fecha Inicio',
            dataIndex: 'FechaInicio',
            width: 100,
            align: 'center'
        }, {
            text: 'Fecha Fin',
            dataIndex: 'FechaFin',
            width: 100,
            align: 'center'
        }
        , {
            text: '<div style="text-align: center;">Motivo Fin Periodo</div>',
            dataIndex: 'NomMotivoFinPeriodo',
            flex: 1
        }
                //}
    ],
                tbar: Ext.create('Ext.toolbar.Toolbar', {
                    layout: {
                        overflowHandler: 'Menu'
                    },
                    items: [{
                        xtype: 'buttongroup',
                        title: 'Mantenimiento',
                        columns: 5,
                        height: 73,
                        items: [{
                            text: 'Agregar', iconCls: 'agregar', itemId: 'create', iconAlign: 'top',
                            hrefTarget: 'periodolaboral/create/' +btnp.IdPersonal,
                            handler: function (btn) {
                                btn.IdPersonal = btnp.IdPersonal;
                                //btn.StoreArbol = storeArbolEstrOrg;
                                new SistIntegral.RRHH.PeriodoLaboral().Window(btn);
                            }
                        }, {
                            text: 'Editar', iconCls: 'editar', itemId: 'edit', iconAlign: 'top',
                            hrefTarget: 'periodolaboral/edit/',
                            handler: function (btn) {
                                btn.IdPersonal = btnp.IdPersonal;
                                //                    btn.StoreArbol = storeArbolEstrOrg;
                                new SistIntegral.RRHH.PeriodoLaboral().Window(btn);
                            }
                        }
            , {
                text: 'Finalizar', iconCls: 'eliminar', itemId: 'finalizar', iconAlign: 'top',
                hrefTarget: 'periodolaboral/Finalizar/',
                handler: function (btn) {
                    btn.IdPersonal = btnp.IdPersonal;
                    new SistIntegral.RRHH.PeriodoLaboral().Window(btn);
                }
            }, {
                text: 'Ver Reporte', iconCls: 'eliminar', itemId: 'ReportLiquidacion', iconAlign: 'top',
                hrefTarget: 'periodolaboral/Finalizar/',
                handler: function (btn) {
                    //btn.IdPersonal = btnp.IdPersonal;
                    //new SistIntegral.RRHH.PeriodoLaboral().Window(btn);
                    var Seleccion = null;
                    Seleccion = Ext.getCmp('gridPeriodolaboral' + btnp.IdPersonal).getSelectionModel().getSelection()[0];


                    if (Seleccion === undefined) {
                        Ext.Msg.show({
                            title: 'Advertencia',
                            msg: 'Seleccione Periodo Laboral Correcto',
                            icon: Ext.MessageBox.WARNING,
                            buttons: Ext.Msg.OK
                        });
                    }
                    else {
                        //console.log(Seleccion.data.IdPeriodoLaboral);
                        var btn = {};
                        btn.titulo = 'Liquidacion Beneficios Sociales',
                        btn.src = '"Reporting/RRHH/Liquidacion.aspx?IdPeriodoLaboral=' + Seleccion.data.IdPeriodoLaboral + '"'
                        new SistIntegral.Componentes.Objetos().ReportWindow(btn);
                    }

                }
            }, {
                text: 'Otros', iconCls: 'eliminar', itemId: 'Otros', iconAlign: 'top',
                hrefTarget: 'periodolaboral/Otros/',
                handler: function (btn) {

                    var Seleccion = null;
                    Seleccion = Ext.getCmp('gridPeriodolaboral' + btnp.IdPersonal).getSelectionModel().getSelection()[0];

                    if (Seleccion === undefined) {
                        Ext.Msg.show({
                            title: 'Advertencia',
                            msg: 'Seleccione Periodo Laboral Correcto',
                            icon: Ext.MessageBox.WARNING,
                            buttons: Ext.Msg.OK
                        });
                    }
                    else {
                        //console.log(Seleccion.data.IdPeriodoLaboral);
                        var btnx = {};
                        btnx.IdPersonal = btnp.IdPersonal;
                        btnx.IdPeriodoLaboral = Seleccion.data.IdPeriodoLaboral;
                        new SistIntegral.RRHH.PeriodoLaboral().WindowOtros(btnx);
                    }


                }
            }, {
                text: 'Pagar Cont', iconCls: 'eliminar', itemId: 'Otros', iconAlign: 'top',
                hrefTarget: 'periodolaboral/Otros/',
                handler: function (btn) {

                    var Seleccion = null;
                    Seleccion = Ext.getCmp('gridPeriodolaboral' + btnp.IdPersonal).getSelectionModel().getSelection()[0];

                    if (Seleccion === undefined) {
                        Ext.Msg.show({
                            title: 'Advertencia',
                            msg: 'Seleccione Periodo Laboral Correcto',
                            icon: Ext.MessageBox.WARNING,
                            buttons: Ext.Msg.OK
                        });
                    }
                    else {
                        //console.log(Seleccion.data.IdPeriodoLaboral);
                        var btnx = {};
                        btnx.IdPersonal = btnp.IdPersonal;
                        btnx.IdPeriodoLaboral = Seleccion.data.IdPeriodoLaboral;
                        new SistIntegral.RRHH.PeriodoLaboral().WindowPagoContable(btnx);
                    }


                }
            }
        ]
                    }]
                }),
                // paging bar on the bottom
                bbar: Ext.create('Ext.PagingToolbar', {
                    store: StorePeriodoLaboral,
                    displayInfo: true,
                    displayMsg: 'Registros {0} - {1} de {2}',
                    emptyMsg: "No Existen Periodos Laborales Registradas"
                })
            });
            Ext.getCmp('PContratoadenda' + btnp.IdPersonal).removeAll();
            Ext.getCmp('PContratoadenda' + btnp.IdPersonal).add(gridPeriodoLaboral);
            //Ext.getCmp('PContratoadenda'+btn.IdPersonal).setActiveTab(gridPeriodoLaboral);
        }
        else {
            //Ext.getCmp('pnlPlanEstrategico').setActiveTab(Ext.getCmp('panelPlan'));
        }
    },

    Formulario: function (btn) {
        var IdPersonal = btn.IdPersonal;
        var CmbMotivoFinPeriodo = null
        var ComboTipoPagoLiquidacion = null;
        if (btn.itemId == 'finalizar') {
            CmbMotivoFinPeriodo = new SistIntegral.Componentes.Objetos().CmbMotivoFinPeriodo();
            ComboTipoPagoLiquidacion = new SistIntegral.Componentes.Objetos().ComboTipoPagoLiquidacion();
        }

        var StoreMaestroIndicadorE = Ext.create('Ext.data.Store', {
            model: 'PeriodoLaboral',
            proxy: {
                type: 'ajax',
                url: 'periodolaboral/IndexById/' + (btn.itemId != 'create' ? btn.Seleccion.get('IdPeriodoLaboral') : ''),
                reader: { type: 'json', root: 'grid' }
            }
        });

        StoreMaestroIndicadorE.on('load', function (store, records) {
            Ext.getCmp('FrmPeriodoLaboral').loadRecord(records[0]);

            if (Ext.getCmp('CmbMotivoFinPeriodo')) {
                Ext.getCmp('CmbMotivoFinPeriodo').getStore().loadRecords(records);
                Ext.getCmp('CmbMotivoFinPeriodo').setValue(records[0].get('IdMotivoFinDePeriodo'));
            }

        });

        var Frm = Ext.create('Ext.form.Panel', {
            id: 'FrmPeriodoLaboral',
            bodyPadding: '5',
            fieldDefaults: {
                msgTarget: 'side',
                labelAlign: 'right',
                labelWidth: 70,
                anchor: '100%'
                //,margin: '5 5 5 5'
            },
            items: [
        {
            xtype: 'datefield',
            flex: 1,
            allowBlank: false,
            name: 'FechaInicio',
            fieldLabel: 'Fecha Inicio'
        }, {
            xtype: 'datefield',
            flex: 1,
            allowBlank: (btn.itemId == 'finalizar' ? false : true),
            name: 'FechaFin',
            fieldLabel: 'Fecha Fin'
        }, CmbMotivoFinPeriodo, ComboTipoPagoLiquidacion, {
            xtype: 'hiddenfield',
            name: 'IdPersonal',
            value: btn.IdPersonal
        }],
            buttons: [{
                text: 'Guardar',
                iconCls: 'guardar',
                handler: function () {
                    var form = this.up('form').getForm();
                    if (form.isValid()) {

                        Ext.MessageBox.show({
                            msg: 'Actualizando Periodo Laboral ...',
                            wait: true,
                            waitConfig: { interval: 100 },
                            progressText: 'Espere Por Favor...',
                            width: 300,
                            icon: 'ext-mb-download'
                        });

                        form.submit({
                            url: btn.hrefTarget + (btn.itemId != 'create' ? btn.Seleccion.get('IdPeriodoLaboral') : ''),
                            success: function (form, action) {
                                Ext.getCmp('gridPeriodolaboral' + IdPersonal).getStore().load();
                                Ext.getCmp('WPeriodoLaboral').close();

                                setTimeout(function () {
                                    Ext.MessageBox.hide();
                                    Ext.example.msg('Hecho', 'Tu Operaci&#243n se Realiz&#243 Correctamente!');
                                }, 1000);
                            },
                            failure: function (form, action) {
                                Ext.getCmp('WPeriodoLaboral').close();
                                Ext.MessageBox.hide();

                                Ext.MessageBox.show({
                                    title: 'Error',
                                    msg: action.result.msg,
                                    buttons: Ext.MessageBox.OK,
                                    icon: Ext.MessageBox.ERROR
                                });
                            }
                        });
                    }
                }
            }, {
                text: 'Limpiar',
                iconCls: 'limpiar',
                handler: function () {
                    this.up('form').getForm().reset();
                }
            }]
        });
        if (btn.itemId != 'create') { StoreMaestroIndicadorE.load(); }
        return Frm;
    },

    Window: function (btn) {

        var Seleccion = null;

        if (btn.itemId != 'create') {
            Seleccion = Ext.getCmp('gridPeriodolaboral' + btn.IdPersonal).getSelectionModel().getSelection()[0];
            if (!Seleccion) {
                Ext.Msg.show({
                    title: 'Advertencia',
                    msg: 'Seleccione Periodo Laboral',
                    icon: Ext.MessageBox.WARNING,
                    buttons: Ext.Msg.OK
                });
                return false;
            }
            else {
                btn.Seleccion = Seleccion;
                //console.log(Seleccion);
            }
        }
        var Item = this.Formulario(btn);
        //alert(btn.record.get('IdComponenteDepencia'));
        var win = Ext.create('widget.window', {
            id: 'WPeriodoLaboral',
            title: btn.getText() + ' Periodo Laboral',
            closable: true,
            //bodyPadding:'5',
            border: false,
            width: 370,
            minWidth: 370,
            minHeight: 200,
            height: 200,
            layout: 'fit',
            modal: true
    , items: [Item]
        });

        return win.show();
    },

    FormularioPago: function (btn) {
        var IdPersonal = btn.IdPersonal;

        var Frm = Ext.create('Ext.form.Panel', {
            id: 'FrmPagoPeriodoLaboral',
            bodyPadding: '5',
            fieldDefaults: {
                msgTarget: 'side',
                labelAlign: 'right',
                labelWidth: 70,
                anchor: '100%'
                //,margin: '5 5 5 5'
            },
            items: [
        {
            xtype: 'datefield',
            flex: 1,
            allowBlank: false,
            name: 'FechaInicio',
            fieldLabel: 'Fecha Contable'
        }, {
            xtype: 'hiddenfield',
            name: 'IdPersonal',
            value: btn.IdPersonal
        }],
            buttons: [{
                text: 'Procesar',
                iconCls: 'guardar',
                handler: function () {
                    var form = this.up('form').getForm();
                    if (form.isValid()) {

                        Ext.MessageBox.show({
                            msg: 'Pagando Liquidacion Periodo Laboral ...',
                            wait: true,
                            waitConfig: { interval: 100 },
                            progressText: 'Espere Por Favor...',
                            width: 300,
                            icon: 'ext-mb-download'
                        });

                        form.submit({
                            url: 'periodolaboral/liquidacionContable/' + btn.IdPeriodoLaboral,
                            success: function (form, action) {
                                //Ext.getCmp('gridPeriodolaboral' + IdPersonal).getStore().load();
                                Ext.getCmp('WPagoPeriodoLaboral').close();

                                setTimeout(function () {
                                    Ext.MessageBox.hide();
                                    Ext.example.msg('Hecho', 'Tu Operaci&#243n se Realiz&#243 Correctamente!');
                                }, 1000);

                            },
                            failure: function (form, action) {
                                Ext.getCmp('WPagoPeriodoLaboral').close();
                                Ext.MessageBox.hide();

                                Ext.MessageBox.show({
                                    title: 'Error',
                                    msg: action.result.msg,
                                    buttons: Ext.MessageBox.OK,
                                    icon: Ext.MessageBox.ERROR
                                });
                            }
                        });
                    }
                }
            }, {
                text: 'Limpiar',
                iconCls: 'limpiar',
                handler: function () {
                    this.up('form').getForm().reset();
                }
            }]
        });
        return Frm;
    },

    WindowPagoContable: function (btn) {

        var Seleccion = null;

        //if (btn.itemId != 'create') {
            Seleccion = Ext.getCmp('gridPeriodolaboral' + btn.IdPersonal).getSelectionModel().getSelection()[0];
            if (!Seleccion) {
                Ext.Msg.show({
                    title: 'Advertencia',
                    msg: 'Seleccione Periodo Laboral',
                    icon: Ext.MessageBox.WARNING,
                    buttons: Ext.Msg.OK
                });
                return false;
            }
            else {
                btn.Seleccion = Seleccion;
                //console.log(Seleccion);
            }
        //}
        
        var Item = this.FormularioPago(btn);
        //alert(btn.record.get('IdComponenteDepencia'));
        var win = Ext.create('widget.window', {
            id: 'WPagoPeriodoLaboral',
            title: 'Liquidar Periodo Laboral',
            closable: true,
            //bodyPadding:'5',
            border: false,
            width: 370,
            minWidth: 370,
            minHeight: 200,
            height: 200,
            layout: 'fit',
            modal: true
    , items: [Item]
        });

        return win.show();
//        Ext.Ajax.request({
//            url: 'periodolaboral/liquidacionContable/' + btn.IdPeriodoLaboral,
//            //method: 'POST',
//            success: function (response, action) {
//                console.log(action);
//                console.log(response);
//                if (response.responseText == "OK") {
//                    Ext.Msg.alert('Correcto', "Pago Registrado Correctamente");
//                    //Ext.getCmp('gridDetalleConceptoLiquidacion' + btn.IdPeriodoLaboral).getStore().load();
//                }
//                else {
//                    Ext.Msg.alert('Incorrecto', "No Se Puede Pagar El Registro Seleccionado");
//                }
//            },
//            failure: function (response, action) {

//                Ext.Msg.alert('Incorrecto', "ERROR");
//            }
//        });

    },

    WindowOtros: function (btn) {

        //        var Seleccion = null;

        //        if (btn.itemId != 'create') {
        //            Seleccion = Ext.getCmp('gridPeriodolaboral' + btn.IdPersonal).getSelectionModel().getSelection()[0];
        //            if (!Seleccion) {
        //                Ext.Msg.show({
        //                    title: 'Advertencia',
        //                    msg: 'Seleccione Periodo Laboral',
        //                    icon: Ext.MessageBox.WARNING,
        //                    buttons: Ext.Msg.OK
        //                });
        //                return false;
        //            }
        //            else {
        //                btn.Seleccion = Seleccion;
        //                console.log(Seleccion);
        //            }
        //        }
        var Form = this.FrmDetealleConcepto(btn);
        var Item = this.GridDetalleConcepto(btn);
        //alert(btn.record.get('IdComponenteDepencia'));
        var win = Ext.create('widget.window', {
            id: 'WPeriodoLaboralOtros',
            title: 'Otros Detalles Ingresos o Descuentos',
            closable: true,
            border: false,
            width: 450,
            minWidth: 450,
            minHeight: 400,
            height: 400,
            layout: 'border',
            modal: true,
            defaults: {
                collapsible: true,
                split: true,
                animFloat: false,
                autoHide: false,
                useSplitTips: true
            },
            items: [Form, Item]
        });

        return win.show();
    },

    FrmDetealleConcepto: function (btn) {

        var formPanel = Ext.create('Ext.form.Panel', {
            //frame: true,
            autoScroll: true,
            bodyPadding: 5,
            region: 'center',
            //height: 200,
            //layout: 'fit',
            border: false,
            id: 'FrmDetealleConcepto',
            fieldDefaults: {
                labelAlign: 'left',
                labelWidth: 90,
                anchor: '100%'
            },
            buttons: [{
                text: 'Guardar',
                handler: function () {
                    var form = this.up('form').getForm();
                    var url = "DetalleConceptoLiquidacion/Create";
                    //                    if (IdCompromiso > 0) {
                    //                        url = "Compromiso/Edit/" + IdCompromiso;
                    //                    }
                    form.submit({
                        clientValidation: true,
                        url: url,
                        success: function (formx, action) {
                            //Ext.getCmp('FrmDetealleConcepto').close();
                            //Ext.getCmp('WPeriodoLaboralOtros').close();
                            form.reset();
                            Ext.getCmp('gridDetalleConceptoLiquidacion' + btn.IdPeriodoLaboral).getStore().load();
                            Ext.Msg.alert('Correcto', action.result.msg);
                        },
                        failure: function (formx, action) {
                            Ext.Msg.alert('Incorrecto', action.result.msg);
                        }
                    });
                }
            }, {
                text: 'Eliminar',
                handler: function () {
                    Seleccion = Ext.getCmp('gridDetalleConceptoLiquidacion' + btn.IdPeriodoLaboral).getSelectionModel().getSelection()[0];
                    if (!Seleccion) {
                        Ext.Msg.show({
                            title: 'Advertencia',
                            msg: 'Seleccione Detalle Concepto',
                            icon: Ext.MessageBox.WARNING,
                            buttons: Ext.Msg.OK
                        });
                        return false;
                    }
                    else {
                        Ext.Ajax.request({
                            url: 'DetalleConceptoLiquidacion/Delete/' + Seleccion.data.IdDetalleConceptoLiquidacion,
                            method: 'POST',
                            success: function (response, action) {
                                if (response.responseText == "OK") {
                                    Ext.Msg.alert('Correcto', "Registro Eliminado Correctamente");
                                    Ext.getCmp('gridDetalleConceptoLiquidacion' + btn.IdPeriodoLaboral).getStore().load();
                                }
                                else {
                                    Ext.Msg.alert('Correcto', "No Se Puede Eliminar El Registro Seleccionado");
                                }
                            },
                            failure: function (response, action) {

                                Ext.Msg.alert('Incorrecto', "ERROR");
                            }
                        });
                    }
                }
            }],
            items: [{
                xtype: 'hiddenfield',
                name: 'IdPeriodoLaboral',
                value: btn.IdPeriodoLaboral
            }, {
                xtype: 'textareafield',
                name: 'Glosa',
                allowBlank: false,
                height: 40,
                fieldLabel: 'Glosa'
            }, {
                xtype: 'container',
                layout: 'hbox',
                defaultType: 'textfield',
                items: [{
                    fieldLabel: 'Monto',
                    xtype: 'numberfield',
                    allowBlank: false,
                    name: 'Monto'
                }, {
                    xtype: 'checkboxfield',
                    fieldLabel: 'Deduccion',
                    name: 'AfectoDeduccion',
                    inputValue: true,
                    margin: '0 0 0 10'
                }]
            }]
        });
        return formPanel;
    },

    GridDetalleConcepto: function (btnp) {
        //if (!Ext.getCmp('gridPeriodolaboral' + btnp.IdPersonal)) {

        var StoreDetalleConceptoLiquidacion = Ext.create('Ext.data.Store', {
            model: 'DetalleConceptoLiquidacion',
            pageSize: 25,
            autoLoad: true,
            proxy: {
                type: 'ajax',
                url: 'DetalleConceptoLiquidacion/Index/' + btnp.IdPeriodoLaboral,
                reader: {
                    root: 'Data',
                    totalProperty: 'total'
                }
            }
        });

        var gridDetalleConceptoLiquidacion = Ext.create('Ext.grid.Panel', {
            title: 'Listado de Otros Conceptos',
            id: 'gridDetalleConceptoLiquidacion' + btnp.IdPeriodoLaboral,
            //layout: 'fit',
            height: 250,
            region: 'south',
            autoScroll: true,
            store: StoreDetalleConceptoLiquidacion,
            loadMask: true,
            border: false,
            columnLines: true,
            selModel: {
                pruneRemoved: false
            },
            viewConfig: {
                trackOver: false
            },
            columns: [{ xtype: 'rownumberer' },
        {
            text: 'Glosa',
            dataIndex: 'Glosa',
            flex: 1,
            align: 'left'
        }, {
            text: 'Monto',
            dataIndex: 'Monto',
            width: 100,
            align: 'right',
            renderer: function (value, metaData, record) {
                return value == null ? "0.00" : (value).toFixed(2);
            }
        }
        , {
            text: '<div style="text-align: center;">Deducciones</div>',
            dataIndex: 'AfectoDeduccion',
            width: 100,
            renderer: function (value, metaData, record) {
                return value == false ? "No" : "Si";
            }
        }
    ],
            bbar: Ext.create('Ext.PagingToolbar', {
                store: StoreDetalleConceptoLiquidacion,
                displayInfo: true,
                displayMsg: 'Registros {0} - {1} de {2}',
                emptyMsg: "No Existen Conceptos Registrados"
            })
        });

        return gridDetalleConceptoLiquidacion;
    }

});